import scrapy
from urllib.parse import urljoin

class ImgSpider(scrapy.Spider):
    name = "img"
    # allowed_domains = ["desk.zol.com.cn"]
    start_urls = ["http://desk.zol.com.cn/dongman/"]
    def parse(self, response):

        # 先抓取到每个图片详情的url
        url_list = response.xpath('//ul[@class="pic-list2  clearfix"]/li/a/@href').extract()
        # 获取到url列表后 进行循环进行每一个url详情页的请求
        for url in url_list:
            # 因为抓取到的url并不完整，需要进行手动拼接
            # urljoin('https://desk.zol.com.cn/dongman/', '/bizhi/8301_103027_2.html')
            url = urljoin('https://desk.zol.com.cn/dongman/', url)
            # 拼凑完发现当前url中有下载exe的url，将其去除
            if url.find('exe') != -1:
                continue
            # 发现不是这个以这个开头的也过滤
            if url.startswith('https://desk.zol.com.cn/dongman/') == -1:
                continue
            # print(url)
            yield scrapy.Request(url, callback=self.parse_detail)

    # 对详情页进行解析
    def parse_detail(self, resp):
        # 获取当前详情页中最大尺寸图片的url
        max_img_url = resp.xpath('//dd[@id="tagfbl"]/a/@href').extract()
        # 判断当前最大图片的url地址，为倒数第二个，如果当前图片列表url长度小于2 则当前证明不是图片的url
        if len(max_img_url) > 2:
            max_img_url = urljoin('https://desk.zol.com.cn/', max_img_url[0])
            # 对url页面进行请求 获取最终大图的页面
            yield scrapy.Request(max_img_url, callback=self.parse_img_detail)

    def parse_img_detail(self, resp):
        # 解析出大图的url
        url = resp.xpath("//img[1]/@src").extract_first()
        return {'url': url}



